<?php

namespace App\Services\Import;

use App\Patent;
use Illuminate\Support\Carbon;

class PatentGradeImportService
{
    protected $patent_sn;
    protected $patent_type_id;
    protected $data = [];

    public function __construct($header = [])
    {

    }

    public function getPatentSn()
    {
        return $this->patent_sn;
    }

    public function importScore($row)
    {
        $this->data = [];
        $patent_sn = trim($row[2]);
        $this->patent_sn = china_patent_sn($patent_sn);
        $this->patent_type_id = substr($this->patent_sn, 4, 1);
        $patent = Patent::query()->where('patent_sn', $this->patent_sn)->first();
        if ($patent) {
            $this->initData($row);
            $data = $this->getData();
            $score = ($data['fl']['score'] + $data['js']['score']) * 0.35 + $data['jj']['score'] * 0.3;
            $patent->score = round($score, 2);
            $patent->assessment = $data;
            $patent->save();
        }
    }

    protected function initData($row)
    {
        $data = [];
        //法律 0-5 ---------------------------------------------------------------------
        //0权利要求项数 不超过5项，5分；5-10项，7分；大于10项，10分         8 => '权利要求数量',
        $data[] = intval($row[8]);
        //1同族地域布局情况 =1:2分；=2：4分； >=3：6分         9 => '简单同族国家/地区',
        $data[] = collect(explode('|', trim($row[9])))->filter()->count();
        //2专利的延续申请情况(关联子案申请号)有，得4分；无，得2分。   10 => '关联子案申请号',
        $data[] = !!trim($row[10]);
        //3权利要求主题类型 方法及产品兼备10分，产品8分，方法6分        11 => '权利要求类型',
        $data[] = $row[11];
        //4 有效期（15）  12 => '(预计)失效日',
        $data[] = $row[12];
        //5专利许可情况（5）  13 => '许可次数',16 => '转让次数总计',17 => '质押次数',
        $data[] = ($row[13] || $row[16] || $row[17]) ? 5 : 3;
        //技术6-7----------------------------------------------------------------------
        //6 先进性（15）被引次数（是否）   14 => '施引专利申请号数量',
        $data[] = intval($row[14]);
        //7 适用范围（20） 3个以上20分；小于3个8分        15 => 'IPC数量',
        $data[] = intval($row[15]);
        //经济8-------------------------------------------
        //8 市场应用情况（24）-许可
        $data[] = intval($row[13]);
        //9 市场应用情况（24）-转让
        $data[] = intval($row[16]);
        //10 市场应用情况（24）-质押
        $data[] = intval($row[17]);
        //11 政策适应性（15）属于15、不属于6    18 => '战略性新兴产业分类',
        $data[] = trim($row[18]);

        //12    21 => '技术价值',
        $data[] = trim($row[21]);
        //13       22 => '法律价值',
        $data[] = trim($row[22]);
        //14经济        23 => '市场价值',
        $data[] = trim($row[23]);
        //15专利评分
        //$data[] = trim($row[20]);

        $this->data = $data;
    }

    public function getData()
    {
        $score12 = $this->data[12];
        $score13 = $this->data[13];
        $score14 = $this->data[14];

        $js = $this->jsValue();
        $fl = $this->flValue();
        $jj = $this->jjValue();

        //参考评分
        if (is_numeric($score12)) {
            $js['score'] = round(($js['score'] + $score12) / 2, 2);
        }
        if (is_numeric($score13)) {
            $fl['score'] = round(($fl['score'] + $score13) / 2, 2);
        }
        if (is_numeric($score14)) {
            $jj['score'] = round(($jj['score'] + $score14) / 2, 2);
        }

        return ['fl' => $fl, 'js' => $js, 'jj' => $jj];
    }

    protected function jsValue()
    {
        $js = collect([
            $this->js_xjx1(),
            $this->js_qs2(),
            $this->js_fw3(),
            $this->js_pt4(),
            $this->js_kdt5(),
            $this->js_csd6()
        ]);
        $score = $js->sum();
        return [
            'data'  => [
                '先进性'         => $js[0] * 6.6,
                '行业发展趋势'   => $js[1] * 10,
                '适用范围'       => $js[2] * 5,
                '配套技术依存度' => $js[3] * 6.6,
                '可替代性'       => $js[4] * 5,
                '成熟度'         => $js[5] * 5,
            ],
            'score' => round($score, 2),
        ];
    }

    protected function flValue()
    {
        $wdx = $this->fl_wdx0();
        $fl = collect([
            $this->fl_bjqk1(),
            $this->fl_bkgbx2(),
            $this->fl_ylx3(),
            $this->fl_qqkpdx4(),
            $this->fl_yxx5(),
            $this->fl_xkqk6()
        ]);
        $score = $wdx * $fl->sum();
        return [
            'data'  => [
                '稳定性'       => $wdx * 100,
                '专利布局情况' => $fl[0] * 6.6,
                '不可规避性'   => $fl[1] * 3.33,
                '依赖性'       => $fl[2] * 6.6,
                '侵权可判性'   => $fl[3] * 5,
                '有效性'       => $fl[4] * 6.6,
                '专利许可情况' => $fl[5] * 20,
            ],
            'score' => round($score, 2)
        ];
    }

    protected function jjValue()
    {
        $jj = collect([
            $this->jj_yy1(),
            $this->jj_gm2(),
            $this->jj_zyl3(),
            $this->jj_jz4(),
            $this->jj_sy5(),
        ]);
        $score = $jj->sum();
        return [
            'data'  => [
                '市场应用情况' => $jj[0] * 4,
                '市场规模'     => $jj[1] * 5,
                '市场占有率'   => $jj[2] * 5,
                '竞争情况'     => $jj[3] * 5,
                '政策适应性'   => $jj[4] * 6.6,
            ],
            'score' => round($score, 2),
        ];
    }


    //法律-1稳定性
    protected function fl_wdx0()
    {
        $data = $this->data;
        //异议、无效或诉讼情况
        $wd1 = 0.8;
        //独权技术特征数量 统一 7分
        $wd2 = 7;
        //实审评价 发明取35 新型取30
        $wd3 = data_get([1 => 35, 2 => 30], $this->patent_type_id, 0);
        //同族保护范围一致性 统一18分
        $wd4 = 18;
        // 8 => '权利要求数量', 利要求项数不超过5项，5分；5-10项，7分；大于10项，10分
        if ($data[0] < 5) {
            $wd5 = 5;
        } elseif ($data[0] <= 10) {
            $wd5 = 7;
        } else {
            $wd5 = 10;
        }
        //综合稳定性评价 统一取16分
        $wd6 = 16;
        return $wd1 * ($wd2 + $wd3 + $wd4 + $wd5 + $wd6) / 100;
    }

    //法律-2专利布局情况
    protected function fl_bjqk1()
    {
        $data = $this->data;
        //1同族地域布局情况 =1:2分；=2：4分； >=3：6分
        $bj1 = data_get([0 => 0, 1 => 2, 2 => 4, 3 => 6], $data[1], 6);
        $bj2 = $data[2] ? 4 : 2;
        $bj3 = 1;
        $bj4 = 1;
        return $bj1 + $bj2 + $bj3 + $bj4;
    }

    //法律-3不可规避性
    protected function fl_bkgbx2(): int
    {
        return 18;
    }

    //法律-4依赖性
    protected function fl_ylx3(): int
    {
        return 9;
    }

    //法律-5利侵权可判性
    protected function fl_qqkpdx4(): int
    {
        $row = $this->data;
        $a1 = 10;
        //3权利要求主题类型 方法及产品兼备10分，产品8分，方法6分
        $a2 = 0;
        if (strstr($row[3], '产品')) {
            $a2 += 8;
        }
        if (strstr($row[3], '方法')) {
            $a2 += 6;
        }
        //2权利要求主题类型 方法及产品兼备10分，产品8分，方法6分
        $a2 = min($a2, 10);
        return $a1 + $a2;
    }

    //法律-6有效性
    protected function fl_yxx5(): int
    {
        $year = Carbon::parse($this->data[4])->year - date('Y');
        if ($year > 6) {
            return 15;
        } elseif ($year > 3) {
            return 12;
        }
        return 8;
    }

    //法律-7专利许可情况
    protected function fl_xkqk6(): int
    {
        return intval($this->data[5]);
    }
    //技术------------------------------------------------------------------------------
    //技术 -1先进性（15）
    protected function js_xjx1(): int
    {
        //被引次数  有被引用1分，无0分
        $a1 = $this->data[6] ? 1 : 0;
        //是否存在X/Y/E类文献
        $a2 = 1;
        //发明人申请人知名度
        $a3 = 2;
        //创新度(8) 5
        $a4 = 5;
        //技术周期(2) 2
        $a5 = 2;
        return $a1 + $a2 + $a3 + $a4 + $a5;
    }

    //技术 -2行业发展趋势（10）
    protected function js_qs2(): int
    {
        //技术生长率(3) 2  技术生命周期阶段(7) 5
        return 7;
    }

    //技术 -3适用范围（20）
    protected function js_fw3(): int
    {
        //分类号数量(20) 3个以上5分；小于3个2分  * 4 = 20 ;8
        return $this->data[7] >= 3 ? 20 : 8;
    }

    //技术 -4配套技术依存度（15）
    protected function js_pt4(): int
    {
        return 6;
    }

    //技术 -5可替代性（20）
    protected function js_kdt5(): int
    {
        return 12;
    }

    //技术 -6成熟度（20）
    protected function js_csd6(): int
    {
        return 12;
    }
    //经济------------------------------------------------------------------------------
    //经济 - 1市场应用情况（24）
    protected function jj_yy1(): int
    {
        $a1 = $this->data[8] ? 8 : 4;
        $a2 = $this->data[9] ? 8 : 4;
        $a3 = $this->data[10] ? 8 : 4;
        return $a1 + $a2 + $a3;
    }

    //经济 - 2市场规模（20）
    protected function jj_gm2(): int
    {
        return 12;
    }

    //经济 - 3市场占有率（20）
    protected function jj_zyl3(): int
    {
        return 12;
    }

    //经济 - 4竞争情况（20）
    protected function jj_jz4(): int
    {
        return 12;
    }

    //经济 - 5政策适应性（15）
    protected function jj_sy5(): int
    {
        return $this->data[11] ? 15 : 6;
    }

}
